Java Web

HTTP协议有哪些组成部分?

  • 请求:
    • 请求行:请求方式 请求url 请求协议/版本
    • 请求头:请求头名称: 请求头值,客户端浏览器告诉服务器一些信息,如
      • User-Agent本机OS、浏览器信息
      • Referer请求来自哪里(用于防盗链,统计工作)
    • 请求体(GET没有、POST有)
  • 响应:
    • 响应行:协议/版本 响应状态码 状态码描述
    • 响应头:如Content-Type响应体的MIME类型,编码格式;
    • 响应体

常见状态码

状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。都是3位数字

  • 1xx:服务器接收客户端消息,但没有接受完成,等待一段时间后,发送1xx状态码。很少出现
  • 2xx客户端请求成功。代表:200。很少出现,因为绝大部分都是成功,直接显示响应体内容
  • 3xx重定向。代表:302(重定向)304(访问缓存)
  • 4xx:客户端错误。代表如下:
    • 400(Bad Request,客户端请求有语法错误,不能被服务器所理解)
    • 401(Unauthorized,请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用)
    • 403(Forbidden ,服务器收到请求,但是拒绝提供服务)
    • 404(请求路径没有对应的资源,输入了错误URL)
    • 405:请求方式没有对应的doXxx方法
  • 5xx:服务器端错误。代表:
    • 500服务器内部出现异常
    • 503(Server Unavailable,服务器当前不能处理客户端的请求,一段时间后可能恢复正常)

GET 和 POST 的区别

  • GET:请求参数在请求行中,在url后且长度有限制。相对不太安全。一般用于获取操作,幂等
  • POST:请求参数在请求体中,请求的url长度没有限制的,相对安全。一般用于新增操作,非幂等
  • 相同:都是用来跟踪浏览器用户状态会话技术
  • 区别:
    • Cookie存储在客户端,存储数据量有限,不安全

    • Session存储在服务端,存储数据量大,安全。但是过多的Session会占用服务器内存,影响性能。

      Session是基于Cookie进行信息处理的

  • Cookie 生命周期默认为关闭浏览器则删除(负数);立即删除(0);写入硬盘并指定存活时间(正数)
  • 默认失效时间 30分钟(web.xml配置);Session 生命周期在服务器关闭时失效;session对象调用invalidate()立即失效;

Ajax

Asynchronous JavaScript and XML,优点:

  • 通过异步模式,可以实现局部刷新,提升了用户体验
  • Ajax引擎在客户端运行,减少服务端工作及负载

Servlet 的生命周期

  • void init(ServletConfig)创建Servlet对象后立即执行init方法;一个Servlet在内存中只存在一个对象(==单例==)

    默认情况下,第一次被访问时,Servlet被创建。修改创建时机<load-on-startup>的值为负数,越小优先级越高

  • void service(ServletRequest request, ServletResponse response)每次处理请求时都会被调用service方法;

  • void destroy():服务器正常关闭销毁Servlet对象前执行释放资源的方法(只1次);

forward 与 redirect 的区别

  • 转发 是服务器行为,一次请求,在地址栏会显示同一URL,而 重定向 是客户端行为,两次请求,会显示不同的URL(302,location)
  • 转发 可以用于共享Request数据,而 重定向 不能共享Request数据
  • 转发只能用于同一web应用中组件,重定向可以用于任意URL

request.getAttribute()/getParameter()

  • getParameter/Map 是获取表单GET、POST提交的参数,返回字符串、Map
  • getAttribute和setAttribute是用来在Request域中存取数据的,返回对象

OSI 七层模型

  • 物理层:bit流
  • 数据链路层:数据帧Frame
  • 网络层:数据包package
  • 传输层:数据段segment
  • 会话层:
  • 表示层
  • 应用层

TCP/IP 模型

  • 链路层:网络连接设备的驱动协议
  • 网络层:将传输的数据进行分组,将分组数据发送到目标计算机或者网络
  • 传输层:网络通信,TCP、UDP协议等
  • 应用层:HTTP协议等